package com.atguigu.userprofile.mapper;

import com.atguigu.userprofile.bean.UserGroup;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Service;

import javax.ws.rs.DELETE;
import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhangchen
 * @since 2021-05-04
 */


@Mapper
@DS("mysql")
public interface UserGroupMapper extends BaseMapper<UserGroup> {

        @DS("ck")
        @Insert("insert into user_group select #{id}, ${sql} ")
        void insertUserGroupToCK(@Param("id") Long id,@Param("sql") String bitmapAndSql);


        //从刚刚写入的分群结果表中查询当前这个分群有多少人
        @DS("ck")
        @Select("select bitmapCardinality(us) from user_group where user_group_id = #{id}")
        Long queryUserGroupNum(String id);

        @DS("ck")
        @Select("select bitmapCardinality(${sql}) ")
        Long evaluateUserGroupNum(@Param("sql") String sql);

        /*
                        ck： bitmap  ------> java:  List<String> -----> redis:

                        为了防止，在查询时，异步的删除操作在后台尚未执行，导致可能查到未删除的旧数据，添加final!

                        final: 查询出结果后，进行合并，在合并时，会帮你处理掉旧数据，保证数据的一致性。
         */
        @DS("ck")
        @Select("select arrayJoin(bitmapToArray(us)) from user_group final where user_group_id = #{id}")
        List<String> queryUserGroup(String id);

        //删除人群包
        @DS("ck")
        @Delete("alter table user_group delete where user_group_id =#{dt}  ")
        void deleteUserGroup(String id);


}
